package hojatrabajo1;

//****************************************************************
// Autor:   Yimy Juarez 
//          Eddy Castro
//          Rodrigo Medrano
// Seccion: 10
// Nombre del Archivo: Radio.java
// Fecha de Modificacion:09/07/2012
// Descripcion:
// Modelado del radio implementando la interfaz iRadio.java
// ***************************************************************


/**
 * 
 * @author eddy
 * @author rodrigo
 * @author yimy
 */
public  class Radio implements iRadio
{
    
    private boolean estadoRadio=false, signal=true;
    private float actualFreq_FM=87.9f, actualFreq_AM=530f, actualFreq=530f;
    /**
     * 
     */
    protected float chanelAM[]= new float[12];
    /**
     * 
     */
    protected float chanelFM[]= new float[12];
	
    
//-----------------------------------------------------------------
//  Constructor: Inicializacion de clase Carro            
//-----------------------------------------------------------------
    /**
     * 
     */
    public Radio()
    {

    }

    /** 
     * @descripcion: Enciende o apaga el Radio.
     * @nombre: Power()
     * @parametro: 
     * @retorno: True si el radio se encendió, o false si el
     * radio se apagó.
     * @pre-condiciones:
     * @post-condiciones:
     */
    public boolean Power()
    {
        if (estadoRadio)
	{
            estadoRadio=false;
            return estadoRadio;
	} 
	else
	{
            estadoRadio=true;
            return estadoRadio;
	} 
    }
   


    /* *
     * @descripcion: Cambia la banda de AM a FM o viceversa.
     * @nombre: ChangeSignal()
     * @parametro: 
     * @retorno: True si la banda es AM y false si la banda
     * es FM.
     * @pre-condiciones:
     * @post-condiciones:
     */
    public boolean ChangeSignal()
    {
        if (signal)
	{
            signal=false;  //Cambiar a FM
            actualFreq = 87.9f;
            return signal;

	}
	else
	{
            signal=true;   //Cambiar a AM
            actualFreq = 530f;
            return signal;
	}
    } 

   /**
     * @descripcion: Adelanta la frecuencia a la siguiente posible..
     * @nombre: NextFreq()
     * @parametro: 
     * @retorno: La frecuencia a la que se pasa.
     * @pre-condiciones:
     * @post-condiciones:
     */
    public float NextFreq()
    {
        if(signal)
		{
            actualFreq_AM+=10;
            if(actualFreq_AM==1620f)
                actualFreq_AM=530f;
			actualFreq=actualFreq_AM;
			return actualFreq;
			
		}
		else
		{
            actualFreq_FM+=0.2;
            if(actualFreq_FM==108.1f)
                actualFreq_FM=87.9f;
			actualFreq=actualFreq_FM;
			return actualFreq;
        }
    }    
    
  /**
     * @descripcion: Graba la frecuencia actual en el botón dado. Existen únicamente
     * 12 posiciones de memoria (botones) por cada Banda, y se encuentran
     * en el rango [1,12].
     * @nombre: SaveFreq()
     * @parametro: Boton:int
     * @retorno True si la operación fue exitosa, false en caso contrario.
     * @pre-condiciones:
     * @post-condiciones:
     */
    public  boolean SaveFreq( int Boton )	
    {
        if(signal)
	{
            if ((Boton >=1)&&(Boton <=12))
            {	
                chanelAM[Boton-1]=actualFreq_AM;
		return true;
            }
            else
            return false;
	} 
	else
	{
            if ((Boton >=1)&&(Boton <=12))
                {	
                    chanelFM[Boton-1]=actualFreq_FM;
                    return true;
		}
		else
		return false;
	} 
			
    }
    
    /**
     * @descripcion: Cambia la estación a la grabada en el botón dado. Devuelve la estación
     * actual que se escucha. Existen únicamente 12 posiciones de memoria por
     * cada Banda, y se encuentran en el rango [1,12].
     * @nombre: ChangeTune()
     * @parametro: Boton:int
     * @retorno La frecuencia (nueva) a la que está sintonizada la radio.
     * @pre-condiciones:
     * @post-condiciones:
     */
    public  float ChangeTune( int Boton )
    {
        if(signal)
	{
            actualFreq_AM=chanelAM[Boton-1];
            actualFreq=actualFreq_AM;
            return actualFreq;
	}	
	else
	{
            actualFreq_FM=chanelFM[Boton-1];
            actualFreq=actualFreq_FM;
            return actualFreq;
	}
    } 

	
    /**
     * @descripcion: Cambia la estación a la grabada en el botón dado. Devuelve la estación
     * actual que se escucha. Existen únicamente 12 posiciones de memoria por
     * cada Banda, y se encuentran en el rango [1,12].
     * @nombre: IsOn()
     * @retorno True si la radio está encendida, false en caso contrario.
     * @pre-condiciones:
     * @post-condiciones:
     */
    public boolean IsOn()
    {
        return estadoRadio;
    }

    /**     
     * @descripcion: Cambia la estación a la grabada en el botón dado. Devuelve la estación
     * actual que se escucha. Existen únicamente 12 posiciones de memoria por
     * cada Banda, y se encuentran en el rango [1,12].
     * @nombre: IsAm()
     * @retorno True si la banda es AM, y false si es FM.
     * @pre-condiciones:
     * @post-condiciones:
     */
    public boolean IsAm()
    {
        return signal;
    }
	
    /**     
     * @descripcion: Cambia la estación a la grabada en el botón dado. Devuelve la estación
     * actual que se escucha. Existen únicamente 12 posiciones de memoria por
     * cada Banda, y se encuentran en el rango [1,12].
     * @nombre: GetFreq()
     * @retorno La frecuencia actual a la que está sintonizada la radio.
     * @pre-condiciones:
     * @post-condiciones:
     */
    public  float GetFreq()
    {
        return actualFreq;
    }
}	 
